#include "circle.h"

Circle::Circle()
{

}

void Circle::draw(QPaintDevice* device, qreal scale)
{
    QPainter painter;

    QPen pen;
    QBrush brush;

    pen.setColor(this->strokeColor);
    pen.setWidth(this->strokeWidth);
    pen.setJoinStyle(Qt::MiterJoin);

    brush.setColor(this->fillColor);
    brush.setStyle(Qt::SolidPattern);

    painter.begin(device);

    painter.scale(scale, scale);
    painter.setPen(pen);
    painter.setBrush(brush);
    painter.drawEllipse(this->centerPoint,
            this->radius,
            this->radius);

    painter.end();
}

QDomElement Circle::saveToNode(QDomDocument &domDoc)
{
    //Создание узла элемента
    QDomElement domElement = domDoc.createElement("circle");

    //Добавление свойств
    domElement.setAttribute("cx",this->centerPoint.x());
    domElement.setAttribute("cy",this->centerPoint.y());
    domElement.setAttribute("r",this->radius);

    QMap<QString,QString> styleMap;

    styleMap.insert("fill",getHexColor(fillColor));
    styleMap.insert("stroke",getHexColor(strokeColor));
    styleMap.insert("fill-opacity",QString::number(fillColor.alphaF()));
    styleMap.insert("stroke-opacity",QString::number(strokeColor.alphaF()));
    styleMap.insert("stroke-width",QString::number(strokeWidth));

    domElement.setAttribute("style",constructStyle(styleMap));

    return domElement;
}

void Circle::loadFromNode(const QDomElement &node)
{
    // Читаем атрибут style
    QString style = node.attribute("style","");

    QMap<QString, QString> stylemap = parseStyle(style);

    // Цвет заполнения
    if (stylemap.contains("fill"))
    {
        QString fillValue = stylemap.value("fill");
        if (fillValue == "none")
            fillColor = QColor(0,0,0,0);
        else
            fillColor = QColor(fillValue);
    }

    // Цвет линии
    if (stylemap.contains("stroke"))
    {
        QString strokeValue = stylemap.value("stroke");
        if(strokeValue == "none")
            strokeColor = QColor(0,0,0,0);
        else
            strokeColor = QColor(strokeValue);
    }

    // Прозрачность заполнения
    if (stylemap.contains("fill-opacity"))    
        fillColor.setAlphaF(stylemap.value("fill-opacity").toFloat());    

    // Прозрачность линии
    if (stylemap.contains("stroke-opacity"))    
        strokeColor.setAlphaF(stylemap.value("stroke-opacity").toFloat());

    // Толщина линии
    if (stylemap.contains("stroke-width"))
    {
        QString strokeWidthValue = stylemap.value("stroke-width");
        strokeWidth = strokeWidthValue.toInt();
    }

    // Читаем атрибуты расположения и размеров
    centerPoint.setX(node.attribute("cx","0").toInt());
    centerPoint.setY(node.attribute("cy","0").toInt());
    radius = node.attribute("r","0").toInt();
}
